//---------------------------------------------------------------------------
#ifndef uQuickPH
#define uQuickPH
//---------------------------------------------------------------------------
#include "Outils.h"
#include <SysUtils.hpp>
#include <Controls.hpp>
#include <Classes.hpp>
#include <Forms.hpp>
#include <Registry.hpp>
#include <Stdio.h>
#include <Printers.hpp>

#include "Eic.h"
#include "uParmPrt.h"
#include "uSelPrt.h"
#include "BTrieve.h"
//---------------------------------------------------------------------------
class CQuickPrinter;
typedef void __fastcall (__closure *TOnPageHeader)(CQuickPrinter *pPrinter);
typedef void __fastcall (__closure *TOnPageFooter)(CQuickPrinter *pPrinter);
//---------------------------------------------------------------------------
class PACKAGE_OUTILS CQuickPrinter : public TComponent
{
private:
  TRegistry  *m_pRegistry;       // Accès à la base de registre
  AnsiString  m_strConstructeur; // Nom du constructeur de l'imprimante rapide
  AnsiString  m_strImprimante;   // Nom de l'imprmante rapide
  AnsiString  m_strPort;         // Port de l'impression
  TDefPrinter m_DPParams;        // Paramètres de l'imprimante rapide

  char          m_szLPT3RemoteName[ 256];
  DWORD         m_nSizeBuffer;
  bool          m_bLeaveConnection;
  bool          m_bRestoreConnection;
  TOnPageHeader m_pfncOnPageHeader;
  TOnPageFooter m_pfncOnPageFooter;

  FILE         *m_pStream;              // Flux vers l'imprimante
  int           m_nCurLigne;            // Numéro de la ligne courant
  int           m_nCurPage;             // Numéro de la page courante
  int           m_nMaxLines;            // Nombre de lignes du papier
  int           m_nMaxCols;             // Nombre de colonnes du papier
  int           m_nPageFLines;          // Nombre de lignes que l'utilisateur affichera pour la fin de page
  int           m_nSkipPage;            // Détermine si l'on accepte le saut de page
  int           m_nReprisePage;         // Numéro de page de la reprise
  bool          m_bBinaryOpen;          // Ouverture en mode binaire ou en mode texte de l'imprimante
  bool          m_bInitDoc;

  int           m_nHardLines;
  int           m_nHardCols;

  bool          m_bBold;                // Impression en gras
  bool          m_bItalic;              // Impression en italique
  bool          m_bUnderline;           // Impression en souligné
  PAPER_HEIGHT  m_ePaperHeight;         // Hauteur du papier
  PAPER_STYLE   m_ePaperStyle;          // Style du papier

  AnsiString    m_strPath;              // Chemin ou se trouve le fichier impriman.dat
  AnsiString    m_strFileName;          // m_strPath + "\impriman.dat"

  TPrinterOrientation m_eOrientation;

  void __fastcall SaveParamsPrinter( void);
  bool __fastcall GetPrinterParams ( void);

  void __fastcall PrintCtrlFile( const char *szFile);
  void __fastcall PrintCtrl    ( const char *szCtrl);

  int  __fastcall GetMaxCols   ( void);
  void __fastcall ExecOnPageFooter( void);

  void __fastcall SetPathFileN( const AnsiString &strPath);

  void __cdecl _Print( const char *pcszFormat, ...);

protected:
public:
    __fastcall  CQuickPrinter(TComponent* Owner);
    virtual __fastcall ~CQuickPrinter( void);

    bool __fastcall SelectPrinter( void);

    bool __fastcall StartDoc( void);
    bool __fastcall EndDoc  ( void);
    void __fastcall SkipPage( void);
    bool __fastcall Print( const AnsiString &strText);

    void __fastcall WantLines( int nLines);

    void __fastcall SetBold     ( bool bValue);
    void __fastcall SetItalic   ( bool bValue);
    void __fastcall SetUnderline( bool bValue);

    void __fastcall Set10CPI ( void);
    void __fastcall Set12CPI ( void);
    void __fastcall Set166CPI( void);

    void __fastcall Set6LPI  ( void);
    void __fastcall Set8LPI  ( void);

    bool __fastcall LandscapeIsAccepted( void);

    __property bool                Bold            = { read = m_bBold                              };
    __property bool                Italic          = { read = m_bItalic                            };
    __property int                 MaxCols         = { read = GetMaxCols                           };
    __property int                 Page            = { read = m_nCurPage                           };
    __property int                 PageFooterLines = { read = m_nPageFLines , write=m_nPageFLines  };
    __property PAPER_HEIGHT        PaperHeight     = { read = m_ePaperHeight                       };
    __property PAPER_STYLE         PaperStyle      = { read = m_ePaperStyle                        };
    __property bool                Underline       = { read = m_bUnderline                         };
    __property TPrinterOrientation Orientation     = { read = m_eOrientation, write=m_eOrientation };

__published:
    __property AnsiString   PathFileName    = { read = m_strPath     , write=SetPathFileN   };
    __property int          PageReprise     = { read = m_nReprisePage, write=m_nReprisePage };

    __property TOnPageHeader OnPageHeader = { read=m_pfncOnPageHeader, write=m_pfncOnPageHeader };
    __property TOnPageFooter OnPageFooter = { read=m_pfncOnPageFooter, write=m_pfncOnPageFooter };
};
//---------------------------------------------------------------------------
#endif
